//
//  IFlyBufferQueue.h
//  MSCDemo
//
//  Created by junmei on 13-12-26.
//
//

#ifndef IFlyBufferQueue_h
#define IFlyBufferQueue_h

#include <stdio.h>

typedef struct BufferNode {
    void *                  data;                   //音频数据
    unsigned int            length;                 //音频数据的长度
    unsigned int            playedBufferIndex;      //当前节点已经播放的字节数
    unsigned int            size;                   //当前节点合成的字节数，用于计算播放进度
    struct BufferNode*      next;                   //next
}IFlyBufferNode;

typedef struct {
    IFlyBufferNode *    home;                       //所有音频数据的起始地址，用于保存音频文件
    IFlyBufferNode *    front;                      //对头指针，从这里读取数据播放
    IFlyBufferNode *    rear;                       //队尾指针，从这里附加音频
    unsigned int        length;                     //缓冲区中的音频数据大小
    unsigned int        count;                      //缓冲区中IFlyBufferNode个数
    int                 savepcm;                    //队列的类型，为1时，保存音频文件，只是移动front指针而不释放指向的内存。
}IFlyBufferQueue;

void InitQueue(IFlyBufferQueue *queue);

void QueueType(IFlyBufferQueue *queue, int type);

int IsEmpty(IFlyBufferQueue *queue);

void EnQueue(IFlyBufferQueue *queue, const void* data, unsigned int length, unsigned int size);

void DeQueue(IFlyBufferQueue *queue);

IFlyBufferNode* GetFront(IFlyBufferQueue* queue);

unsigned int GetLength(IFlyBufferQueue* queue);

void ClearQueue(IFlyBufferQueue* queue);

void DestroyQueue(IFlyBufferQueue** queue);

int SavePcmFile(IFlyBufferQueue* queue, const char* fileName);

#endif /* IFlyBufferQueue_h */
